/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
  public:
//     vector<int> printListFromTailToHead(ListNode* head) {
//         vector<int> ans;
//         recur(head, ans);
//         return ans;
//     }
//     void recur(ListNode* cur, vector<int>& ans) {
//         if(!cur) return ;
//         recur(cur->next, ans);
//         ans.push_back(cur->val);
//     }

//     vector<int> printListFromTailToHead(ListNode* head) {
//         vector<int> ans;
//         stack<int> st;
//         while(head) {
//             st.push(head->val);
//             head = head->next;
//         }
//         while(st.size()) {
//             ans.push_back(st.top());
//             st.pop();
//         }
//         return ans;
//     }
    vector<int> printListFromTailToHead(ListNode* head) {
        ListNode* p = head;
        int len = 0;
        if (head == NULL) {
            return {};
        }
        while (p != NULL) {
            p = p->next;
            len++;
        }
        vector<int>arr(len);
        p = head;
        for (int i = len - 1; i >= 0; i--) {
            arr[i] = p->val;
            p = p->next;
        }
        return arr;
    }
};